home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2005 October / PCWOCT05.iso / Software / FromTheMag / The GIMP 2.2.8 / gimp-2.2.8-i586-setup.exe / {app} / share / gimp / 2.0 / scripts / burn-in-anim.scm < prev    next >
Encoding:
GIMP Script-Fu Script  |  2005-06-30  |  7.1 KB  |  205 lines

  1. ;
  2. ;  burn-in-anim.scm V2.1  -  script-fu for the GIMP 1.1 and higher
  3. ;
  4. ;  Copyright (C) 9/2000  Roland Berger
  5. ;  roland@fuchur.leute.server.de
  6. ;  http://fuchur.leute.server.de
  7. ;
  8. ;  Let text appear and fade out with a "burn-in" like SFX.
  9. ;  Works on an image with a text and a background layer
  10. ;
  11. ;  Copying Policy:  GNU Public License http://www.gnu.org
  12. ;
  13.  
  14. (define (script-fu-burn-in-anim org-img
  15.                 org-layer
  16.                 glow-color
  17.                 fadeout
  18.                 bl-width
  19.                 corona-width
  20.                 after-glow
  21.                 show-glow
  22.                 optimize
  23.                 speed)
  24.  
  25.   (let* (
  26.      ;--- main variable: "bl-x" runs from 0 to layer-width
  27.      (bl-x 0)
  28.      (frame-nr 0))
  29.  
  30.     (if (< speed 1)
  31.     (set! speed (* -1 speed)) )
  32.  
  33.     ;--- check image and work on a copy
  34.     (if (= (car (gimp-image-get-layers org-img)) 2)
  35.  
  36.         ;--- main program structure starts here, begin of "if-1"
  37.     (begin
  38.       (gimp-context-push)
  39.  
  40.       (set! img (car (gimp-image-duplicate org-img)))
  41.       (gimp-image-undo-disable img)
  42.       (if (> (car (gimp-drawable-type org-layer)) 1 )
  43.           (gimp-image-convert-rgb img))
  44.       (set! source-layer    (aref (cadr (gimp-image-get-layers img)) 0 ))
  45.       (set! bg-source-layer (aref (cadr (gimp-image-get-layers img)) 1 ))
  46.       (set! source-layer-width (car (gimp-drawable-width  source-layer)))
  47.  
  48.           ;--- hide layers, cause we want to "merge visible layers" later
  49.       (gimp-drawable-set-visible source-layer FALSE)
  50.       (gimp-drawable-set-visible bg-source-layer     FALSE)
  51.  
  52.           ;--- process image horizontal with pixel-speed
  53.       (while (< bl-x (+ source-layer-width bl-width))
  54.          (set! bl-layer (car (gimp-layer-copy source-layer TRUE)))
  55.          (set! bl-layer-name (string-append "fr-nr"
  56.                             (number->string frame-nr 10) ) )
  57.  
  58.          (gimp-image-add-layer img bl-layer -2)
  59.          (gimp-drawable-set-name bl-layer bl-layer-name)
  60.          (gimp-drawable-set-visible bl-layer TRUE)
  61.          (gimp-layer-set-preserve-trans bl-layer TRUE)
  62.          (gimp-layer-add-alpha bl-layer)
  63.  
  64.                  ;--- add an alpha mask for blending and select it
  65.          (gimp-selection-layer-alpha bl-layer)
  66.          (set! bl-mask (car (gimp-layer-create-mask bl-layer ADD-BLACK-MASK)))
  67.          (gimp-layer-add-mask bl-layer bl-mask)
  68.  
  69.                  ;--- handle layer geometry
  70.          (set! bl-layer-width source-layer-width)
  71.          (set! bl-height      (car (gimp-drawable-height bl-layer)))
  72.          (set! bl-x-off (- bl-x     bl-width))
  73.          (set! bl-x-off (+ bl-x-off (car  (gimp-drawable-offsets bl-layer))))
  74.          (set! bl-y-off             (cadr (gimp-drawable-offsets bl-layer)))
  75.  
  76.                  ;--- select a rectangular area to blend
  77.          (gimp-rect-select img bl-x-off bl-y-off bl-width bl-height CHANNEL-OP-REPLACE 0 0)
  78.                  ;--- select at least 1 pixel!
  79.          (gimp-rect-select img bl-x-off bl-y-off (+ bl-width 1) bl-height CHANNEL-OP-ADD 0 0)
  80.  
  81.          (if (= fadeout FALSE)
  82.              (begin
  83.                (set! nofadeout-bl-x-off (car (gimp-drawable-offsets bl-layer)))
  84.                (set! nofadeout-bl-width (+ nofadeout-bl-x-off bl-x))
  85.                (set! nofadeout-bl-width (max nofadeout-bl-width 1))
  86.                (gimp-rect-select img nofadeout-bl-x-off bl-y-off
  87.                      nofadeout-bl-width bl-height
  88.                      CHANNEL-OP-REPLACE 0 0)))
  89.  
  90.                  ;--- alpha blending text to trans (fadeout)
  91.          (gimp-context-set-foreground '(255 255 255))
  92.          (gimp-context-set-background '(  0   0   0))
  93.          (if (= fadeout TRUE)
  94.              (begin
  95.                        ; blend with 20% offset to get less transparency in the front
  96.                (gimp-edit-blend bl-mask FG-BG-RGB-MODE NORMAL-MODE
  97.                     GRADIENT-LINEAR 100 20 REPEAT-NONE FALSE
  98.                     FALSE 0 0 TRUE
  99.                     (+ bl-x-off bl-width) 0 bl-x-off 0)))
  100.  
  101.          (if (= fadeout FALSE)
  102.              (begin
  103.                (gimp-context-set-foreground '(255 255 255))
  104.                (gimp-edit-bucket-fill bl-mask FG-BUCKET-FILL NORMAL-MODE
  105.                                               100 255 0 0 0)))
  106.  
  107.          (gimp-layer-remove-mask bl-layer MASK-APPLY)
  108.  
  109.                  ;--- add bright glow in front
  110.          (if (= show-glow TRUE)
  111.              (begin
  112.                        ;--- add some brightness to whole text
  113.                (if (= fadeout TRUE)
  114.                (gimp-brightness-contrast bl-layer 100 0))
  115.  
  116.                      ;--- blend glow color inside the letters
  117.              (gimp-context-set-foreground glow-color)
  118.              (gimp-edit-blend bl-layer FG-TRANSPARENT-MODE NORMAL-MODE
  119.                       GRADIENT-LINEAR 100 0 REPEAT-NONE FALSE
  120.                       FALSE 0 0 TRUE
  121.                       (+ bl-x-off bl-width) 0
  122.                       (- (+ bl-x-off bl-width) after-glow) 0)
  123.  
  124.                      ;--- add corona effect
  125.              (gimp-selection-layer-alpha bl-layer)
  126.              (gimp-selection-sharpen img)
  127.              (gimp-selection-grow img corona-width)
  128.              (gimp-layer-set-preserve-trans bl-layer FALSE)
  129.              (gimp-selection-feather img corona-width)
  130.              (gimp-context-set-foreground glow-color)
  131.              (gimp-edit-blend bl-layer FG-TRANSPARENT-MODE NORMAL-MODE
  132.                       GRADIENT-LINEAR 100 0 REPEAT-NONE FALSE
  133.                       FALSE 0 0 TRUE
  134.                       (- (+ bl-x-off bl-width) corona-width) 0
  135.                       (- (+ bl-x-off bl-width) after-glow) 0))
  136.          )
  137.  
  138.          ;--- merge with bg layer
  139.          (set! bg-layer (car (gimp-layer-copy bg-source-layer FALSE)))
  140.          (gimp-image-add-layer img bg-layer -1)
  141.          (gimp-image-lower-layer img bg-layer)
  142.          (set! bg-layer-name (string-append "bg-"
  143.                             (number->string frame-nr 10)))
  144.          (gimp-drawable-set-name bg-layer bg-layer-name)
  145.          (gimp-drawable-set-visible bg-layer TRUE)
  146.          (set! blended-layer (car (gimp-image-merge-visible-layers img
  147.                                        CLIP-TO-IMAGE)))
  148.          ;(set! blended-layer bl-layer)
  149.          (gimp-drawable-set-visible blended-layer FALSE)
  150.  
  151.          ;--- end of "while" loop
  152.          (set! frame-nr (+ frame-nr 1))
  153.          (set! bl-x     (+ bl-x speed)))
  154.  
  155.       ;--- finalize the job
  156.       (gimp-selection-none img)
  157.       (gimp-image-remove-layer img    source-layer)
  158.       (gimp-image-remove-layer img bg-source-layer)
  159.  
  160.       (gimp-image-set-filename img "burn-in")
  161.  
  162.       (if (= optimize TRUE)
  163.           (begin
  164.         (gimp-image-convert-indexed img 1 WEB-PALETTE 250 FALSE TRUE "")
  165.         (set! img-out (car (plug-in-animationoptimize 0
  166.                                   img
  167.                                   bl-layer)))))
  168.  
  169.       (gimp-drawable-set-visible (aref (cadr (gimp-image-get-layers img)) 0)
  170.                   TRUE)
  171.       (gimp-image-undo-enable img)
  172.       (gimp-image-clean-all img)
  173.       (set! img-display (car (gimp-display-new img)))
  174.  
  175.       (gimp-displays-flush)
  176.  
  177.       (gimp-context-pop))
  178.  
  179.     ;--- false form of "if-1"
  180.     (gimp-message _"Burn-In: Need two layers in total!"
  181.               "A foreground text layer with transparency"
  182.               "and a background layer."))))
  183.  
  184.  
  185. (script-fu-register "script-fu-burn-in-anim"
  186.             _"B_urn-In..."
  187.             "Burn-in like effect on a fg (text) layer and a bg layer; V2.1"
  188.             "Roland Berger roland@fuchur.leute.server.de"
  189.             "Roland Berger"
  190.             "January 2001"
  191.             "RGBA GRAYA INDEXEDA"
  192.             SF-IMAGE     "The image"            0
  193.             SF-DRAWABLE  "Layer to animate"     0
  194.             SF-COLOR    _"Glow color"           '(255 255 255)
  195.             SF-TOGGLE   _"Fadeout"              FALSE
  196.             SF-VALUE    _"Fadeout width"        "100"
  197.             SF-VALUE    _"Corona width"         "7"
  198.             SF-VALUE    _"After glow"           "50"
  199.             SF-TOGGLE   _"Add glowing"          TRUE
  200.             SF-TOGGLE   _"Prepare for GIF"      FALSE
  201.             SF-VALUE    _"Speed (pixels/frame)" "50")
  202.  
  203. (script-fu-menu-register "script-fu-burn-in-anim"
  204.              _"<Image>/Script-Fu/Animators")
  205.